home *** CD-ROM | disk | FTP | other *** search
/ Aminet 31 / Aminet 31 (1999)(Schatztruhe)[!][Jun 1999].iso / Aminet / comm / www / Hunt.lha / Hunt.rexx < prev   
OS/2 REXX Batch file  |  1999-02-04  |  21KB  |  710 lines

  1. /*
  2.    $VER: Hunt.rexx 2.1 (4.2.99) Copyright (c) Nils Görs.
  3.  
  4.  
  5.    Funktionsbeschreibung:
  6.  
  7.     Sucht mittels GREP, in einer Textdatei einen Text und gibt passende
  8.     Einträge in einem ListView-Fenster aus.
  9.     Ich verwende das Skript um vor einem Download zu überprüfen, ob ich
  10.     das Archiv vielleicht schon einmal gesaugt habe oder um in einer 4MB
  11.     Aminet-CD-Datei ein Archiv, sehr schnell, zu finden ;-)
  12.  
  13.     Seit v2.0 ist es nun auch möglich, aus einer Aminet-Liste (index|recent|charts)
  14.     Archive zu bestellen.
  15.     Voraussetzung:     - TCP/ICP Stack
  16.             - wget (oder ein ähnliches Programm!)
  17.  
  18.    Autor dieses Skripts:
  19.  
  20.        Nils Görs              Tel. : +49 (0)202 78xxxx
  21.        Kaiserstr. 97a         EMail: N.Goers@Art-Line.de
  22.        42329 Wuppertal          oder über das ZP-Support-Brett.
  23.  
  24.    Verwenden Sie bitte nach Möglichkeit elektronische Post!
  25.  
  26.  
  27.   Erstellen Sie bitte eine Datei (PROGDIR:Hunt.base) mit den Pfaden und
  28.   Filenamen der Listen, in denen Sie etwas suchen möchten.
  29. */
  30.  
  31. /* path for the savelist requester */
  32. SaveListDir = "ram:"
  33.  
  34. Grep  = "c:grep"
  35. OutputFile = "t:GrepOut"
  36.  
  37. /* FTP download */
  38. FTP_Get = "c:wget"
  39. HOSTNAME= "ftp://wuarchive.wustl.edu" /* main Aminet-Server */
  40. LOCALDIR= "/systems/amiga/aminet/"
  41. SaveDir = "DOWNLOADS:"
  42.  
  43. /* file length limitation (in KB!) for ListView */
  44. LenghtLimit = 30
  45.  
  46. /* Informationen über das Ausgabefenster      */
  47. LeftBorder   = 10    /*Abstand linker Rand    */
  48. TopBorder    = 300   /*Abstand vom oberen Rand*/
  49. OutPutWidth  = 640   /*Breite des Fensters    */
  50. OutPutHeight = 150   /*Höhe des Fensters      */
  51.  
  52. OPTIONS RESULTS
  53.  
  54. PARSE ARG PubScreen SearchFor
  55.  
  56. IF PubScreen == "?" THEN DO
  57.  OPTIONS PROMPT "PUBSCREEN/K,HUNTFOR/K: "
  58.  PARSE PULL PubScreen SearchFor
  59. END
  60.  
  61. SearchFor=DELSTR(Searchfor,1,1)
  62.  
  63. CALL _InitAll
  64.  
  65. /*
  66. ** Beschreibung der Applikation
  67. */
  68. appname     = 'Hunt'
  69. applongname = 'Hunt - ©96-98 by Nils Görs'
  70. appinfo     = 'find and request interface for grep/wget'
  71. appversion  = '2.1'
  72. apprelease  = '3'
  73. appdate     = '4.2.99'
  74.  
  75. _maintags:
  76. windowtags = WindowID(1),
  77.              PubScreenName(PubScreen),
  78.              WindowBackfillFB,
  79.              WindowTitle(appname appversion),
  80.              BeginMenu('Project'),
  81.              MenuItem('P_ChangePubScreen',10) ItemBarlabel,
  82.              MenuItem('?_About',111) ItemBarlabel,
  83.              MenuItem('Q_Quit',11),
  84.              BeginMenu('Actions'),
  85.              MenuItem('O_Open searchfile...',12),
  86.              MenuItem('C_Change seachfile...',13),
  87.          MenuItem('S_Save listview...',14),
  88.          MenuItem('F_Filter...',15),
  89.          MenuItem('V_ViewPattern...',16),
  90.              'HorizGroupA Space VertGroupA Space',
  91.                'BeginLine',
  92.                  Text3('_Suchen nach:') 'TRAT_ID 2',
  93.                  StringGadget(SearchFor,2) 'TRAT_Value 255',
  94.                  GetEntryButton(3),
  95.                'Endline',
  96.                 'SpaceS',
  97.                 ListSS('Files',1,0,0),
  98.                 'SpaceS',
  99.         NamedSeparatorN("FTP"),
  100.         'BeginLine',
  101.         Button('_Receive',5),
  102.         Button('R_eceive Readme',9),
  103.         Button('_Add2Batch',20),
  104.         Button('_Go2Batch',21),
  105.         'EndLine',
  106.         'BeginLine',
  107.         Button('Get Recen_t',6),
  108.         Button('Get _Charts',7),
  109.         Button('Get _Index',8),
  110.         'EndLine',
  111.         'Space',
  112.                   ClippedTextBox("",3),
  113.                   ClippedTextBox("Liste:" Suchliste,4),
  114.              'Space EndGroup Space EndGroup EndProject'
  115. /*
  116. ** Unterbrechungssignale
  117. */
  118.  
  119. SIGNAL ON break_c
  120. SIGNAL ON failure
  121. SIGNAL ON halt
  122. SIGNAL ON ioerr
  123. SIGNAL ON syntax
  124.  
  125. app = TR_CREATEAPP('TRCA_Name'     '"'appname'"',
  126.                    'TRCA_LongName' '"'applongname'"',
  127.                    'TRCA_Info'     '"'appinfo'"',
  128.                    'TRCA_Version'  '"'appversion'"',
  129.                    'TRCA_Release'  '"'apprelease'"',
  130.                    'TRCA_Date'     '"'appdate'"',
  131.                    'TAG_END')
  132.  
  133. IF app ~= '00000000'x THEN DO
  134.  
  135.    window = TR_OPENPROJECT(app,windowtags)
  136.    WindowProject=C2D(window) /* zum Locken des Fensters bei About */
  137.  
  138. IF SearchFor == "" THEN CALL TR_SendMessage(Window,2,'TROM_ACTIVATE',0)
  139.                    ELSE CALL _StartSearch
  140.  
  141.    IF window ~= '00000000'x THEN DO
  142.       nummer = 0
  143.  
  144.       DO WHILE nummer = 0
  145.          CALL TR_WAIT(app,'')
  146.  
  147.          DO WHILE TR_HANDLEMSG(app,'event')
  148.  
  149. /******************
  150. *** CLOSEGADGET ***
  151. *******************/
  152.             IF event.trm_class = 'TRMS_CLOSEWINDOW' THEN nummer = -1
  153.  
  154. /*************
  155. *** GAGDET ***
  156. **************/
  157.     IF event.trm_class = 'TRMS_ACTION' THEN DO
  158.     SELECT
  159.         WHEN event.trm_id  = 10 THEN CALL _NewPubScreen
  160.         WHEN event.trm_id  = 111 THEN CALL _About
  161.         WHEN event.trm_id  = 11 THEN DO
  162.                     Quit=TR_EasyRequest(app,"Really Quit?",,
  163.                                         "Yes|No","TREZ_Title Quit TREZ_LockProject" WindowProject)
  164.                     IF Quit == 1 THEN nummer=1
  165.                 END
  166.         WHEN event.trm_id  == 12 THEN DO
  167.                      bool = ASL_RequestFile(window,NeueListe,,
  168.                   "ASLFR_PubScreenName" PubScreen,
  169.                   "ASLFR_TitleText" '"Select new file to search in"')
  170.             IF bool ~= 0 THEN DO
  171.                 Suchliste=neueliste.1
  172.                 CALL TR_SETATTRIBUTE(window,4,'TRAT_TEXT',"Liste:" Suchliste)
  173.             END
  174.             CALL TR_SendMessage(Window,2,'TROM_ACTIVATE',0)
  175.         END
  176.         WHEN event.trm_id = 13 THEN CALL _ChangeSearchList
  177.         WHEN event.trm_id = 14 THEN CALL _SaveList
  178.         WHEN event.trm_id = 15 THEN CALL _Filter
  179.         WHEN event.trm_id = 16 THEN CALL _ViewPattern
  180.         WHEN event.trm_id = 2 THEN CALL _StartSearch
  181.  
  182.         WHEN event.trm_id = 5 THEN CALL _FTPGetFile
  183.         WHEN event.trm_id = 9 THEN CALL _FTPGetReadMe
  184.         WHEN event.trm_id = 6 THEN CALL _FTPGetRecent
  185.         WHEN event.trm_id = 7 THEN CALL _FTPGetCharts
  186.         WHEN event.trm_id = 8 THEN CALL _FTPGetIndex
  187.         WHEN event.trm_id = 20 THEN CALL _Add2Batch
  188.         WHEN event.trm_id = 21 THEN CALL _Go2Batch
  189.  
  190.         WHEN event.trm_id = 3 THEN DO
  191.             CALL TR_SETATTRIBUTE(window,2,'TROB_String','')
  192.             CALL TR_SendMessage(Window,2,'TROM_ACTIVATE',0)
  193.         END
  194.     OTHERWISE
  195.         NOP
  196.     END
  197.     END
  198.  
  199. /****************
  200.  *** Tastatur ***
  201.  ****************/
  202.     IF event.trm_class = 'TRMS_KEYPRESSED' THEN DO
  203.         IF event.trm_code == 68 THEN DO
  204.             searchfor = TR_GETATTRIBUTE(window,2,'TROB_String')
  205.             IF searchfor = "" THEN CALL TR_SendMessage(Window,2,'TROM_ACTIVATE',0)
  206.                     ELSE CALL _StartSearch
  207.         END
  208.     END
  209.  
  210.  
  211. /* */
  212.          END
  213.       END
  214.       CALL TR_CLOSEPROJECT(window)
  215.    END
  216.    CALL TR_DELETEAPP(app)
  217. END
  218. EXIT(0)
  219.  
  220. _StartSearch:
  221. IF Searchfor == Searchfor.bak THEN DO
  222.   IF NeueListe.0 ~= 1 THEN RETURN
  223.    ELSE NeueListe.0 = 0
  224. END
  225.  
  226. SearchFor2.1 = TRANSLATE(SearchFor,'0a'x," ")
  227. SearchFor2.0 = 1
  228.  
  229. CALL RXTR_WRITEFILE('t:SearchForF',Searchfor2)
  230.  
  231. CALL TR_LOCKPROJECT(window)
  232. CALL TR_SETATTRIBUTE(window,3,'TRAT_TEXT',"Bitte haben Sie Geduld...")
  233.  
  234. current_stack = pragma('STACK',50000)
  235. ADDRESS COMMAND Grep "-i -f t:"SearchForF Suchliste ">"OutputFile
  236. FoundResult = (rc)
  237. call pragma('STACK', current_stack)
  238.  
  239. CALL TR_UNLOCKPROJECT(window)
  240.  
  241. IF FoundResult == 1 THEN DO
  242.  StatusText = "Nichts gefunden!"
  243.  files.0 = 0
  244. END
  245. ELSE DO
  246.  CALL RXTR_READFILE(OutPutFile,Files)
  247.  
  248.   IF files.0 > 1 THEN StatusText = files.0 "Einträge passen auf das Suchmuster."
  249.          ELSE StatusText = files.0 "Eintrag paßt auf das Suchmuster."
  250.  
  251. END
  252.  
  253. ADDRESS COMMAND "delete" OutputFile "QUIET"
  254. ADDRESS COMMAND "delete t:SearchForF QUIET"
  255. CALL TR_SETATTRIBUTE(window,1,'TROB_ListView',Files)
  256. CALL TR_SETATTRIBUTE(window,3,'TRAT_TEXT',StatusText)
  257.  
  258. Searchfor.bak = Searchfor
  259. RETURN
  260.  
  261. _InitAll:
  262. NL      = '0a'x
  263. TRUE    = 1
  264. FALSE   = 0
  265. Files.0 = 0
  266. BatchList.0 = 0
  267.  
  268.    /*
  269.    ** Open libs
  270.    */
  271.  
  272.    IF ~SHOW('LIBRARIES','tritonrexx.library') THEN
  273.       IF ~ADDLIB('tritonrexx.library',10,-30,0) THEN
  274.          quit('Cannot open tritonrexx.library!',10)
  275.  
  276.    IF ~SHOW(LIBRARIES,'rexxtricks.library') THEN
  277.       IF ~ADDLIB('rexxtricks.library',9,-30,38) THEN
  278.          quit('Cannot open rexxtricks.library!',10)
  279.  
  280.    IF ~SHOW('LIBRARIES','rexxsupport.library') THEN
  281.       IF ~ADDLIB('rexxsupport.library',9,-30,0) THEN
  282.          quit('Cannot open rexxsupport.library!',10)
  283.  
  284.    IF ~SHOW('LIBRARIES','rexxreqtools.library') THEN
  285.       IF ~ADDLIB('rexxreqtools.library',9,-30,0) THEN
  286.          quit('Cannot open rexxreqtools.library!',10)
  287.  
  288.    /*
  289.    ** Set current dir
  290.    */
  291.  
  292.    PARSE SOURCE . . . script .
  293.    progdir =